package com.ht.modules.system.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ht.modules.system.entity.SysApk;
import com.ht.modules.system.entity.SysApkVo;
import com.ht.modules.system.mapper.ApkMapper;
import com.ht.modules.system.service.IApkService;
import com.ht.utils.DateUtils;
import com.ht.utils.DicConstants;
import com.ht.utils.QRcodeImageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.io.File;
import java.util.Date;
import java.util.Map;

/**
 * apk版本升级
 */
@Service
public class ApkServiceImpl extends ServiceImpl<ApkMapper, SysApk> implements IApkService {

    @Autowired
    private ApkMapper apkMapper;
    @Value(value = "${jeecg.path.upload}")
    private String uploadpath;

    @Override
    public Page<SysApkVo> list(Page<SysApkVo> page, SysApkVo sysApkVo, String column, String order) {
        return page.setRecords(apkMapper.list(page, sysApkVo, column, order));
    }

    @Override
    public int updateBatchByIds(String colume, String value, String[] ids){
        return apkMapper.updateBatchByIds(colume, value, ids);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void saveApk(SysApk sysApk) {
        sysApk.setDelFlag(DicConstants.DEL_FLAG_WSC);
        // 设置apk版本是最新版本
        sysApk.setIsNewest(DicConstants.DEL_FLAG_WSC);
        this.save(sysApk);
        // 将其他apk版本设置状态为非最新版本
        apkMapper.updateApkVersionById(sysApk.getId());
    }

    @Override
    public String getIOSQRcode() {
        // 获取最新的ios下载链接
        Map<String, Object> latestLink = apkMapper.getLatestLink();
        if (latestLink == null){
            throw new RuntimeException("暂无可用兑换码，请联系管理员");
        }
        // 获取排序号，用于生成文件名
        Integer orderNumber = (Integer)latestLink.get("order_number");
        String fileName = "IOSQRcode" + String.valueOf(orderNumber);
        // 存放文件路径
        String ctxPath = uploadpath; // 文件存放根目录
        String bizPath = "files"; // 文件存放文件夹
        String todayString = DateUtils.yyyyMMdd.format(new Date()); // 生成日期
        String path = ctxPath + File.separator + bizPath + File.separator + todayString;
        // 创建文件根目录
        File fileRoot = new File(path);
        if (!fileRoot.exists()) {
            fileRoot.mkdirs();// 创建文件根目录
        }
        try {
            // 调用工具类生成二维码文件
            QRcodeImageUtil.buildQuickMark((String)latestLink.get("code_redemption_link"), path, fileName);
        } catch (Exception e){
            throw new RuntimeException("生成二维码失败！");
        }
        // 删除旧文件
        String oldFilePath = path + File.separator + "IOSQRcode" + String.valueOf(orderNumber - 1) + ".png";
        File oldFile = new File(oldFilePath);
        // 如果文件路径所对应的文件存在，并且是一个文件，则直接删除
        if (oldFile.exists() && oldFile.isFile()) {
            if (oldFile.delete()) {
                System.out.println("删除遗留二维码成功！");
            } else {
                System.out.println("删除遗留二维码失败！");
            }
        }
        String filePath = bizPath + File.separator + todayString + File.separator + fileName + ".png";
        if (filePath.contains("\\")) {
            filePath = filePath.replace("\\", "/");
        }
        // 保存文件路径并更改兑换码状态
        apkMapper.updateIOSQRcode(filePath);
        return filePath;
    }

    @Override
    public SysApk getApkInfoByVersion(String apkVersion) {
        return apkMapper.getApkInfoByVersion(apkVersion);
    }

}
